#include<iostream>
#include<vector>
#include<cmath>
using namespace std;

typedef long long LL;
const int N=1e5+10;
vector<int>g[N];
int n;
int st[N];
int ans;
LL w[N];


bool fun(LL x)
{
    LL d=sqrt(x);
    return d*d==x;
}
    
void dfs(int u,int fa)
{
    for(auto x:g[u]){
	if(x==fa)continue;
	dfs(x,u);
	if(fun(w[u]*w[x])&&(!st[x]&&!st[u])){
	       ans+=2;
	       st[x]=1;
	       st[u]=1;
	}
    }
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>w[i];
    for(int i=0;i<n-1;i++){
	int u,v;
	cin>>u>>v;
	g[u].push_back(v);
	g[v].push_back(u);
    }
    dfs(1,-1);
    cout<<ans<<endl;
    return 0;
}
